package com.steakliu.sun.boot.starter.prop;

import com.steakliu.sun.constant.SpringBootStarterConstant;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * 功能说明：
 * <p>
 * Original @Author: steakliu-刘牌, 2023-01-14  13:12
 * <p>
 * Copyright (C)2020-2022  steakliu All rights reserved.
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SunServerProperties {
    /**
     * 是否作为服务端，如果作为服务端为true，否则为false
     */
    private boolean open;
    /**
     * 服务地址
     */
    private String host;
    /**
     * 服务端口
     */
    private int port;
    /**
     * 注册中心类型
     */
    private String registryType;
    /**
     * 注册中心地址
     */
    private String registryAddress;
    /**
     * 反射调用类型
     */
    private String reflect;
    /**
     * 全局token
     */
    private String token;
    /**
     * 服务端向客户端发送心跳时间间隔
     */
    private int heartbeatInterval;
    /**
     * 心跳断开重连次数
     */
    private int heartbeatRetries;
    /**
     *  Netty bossGroup线程数
     */
    private int bossGroupThreads;
    /**
     * Netty workGroup线程数
     */
    private int workGroupThreads;
    /**
     * 是否使用流控
     */
    private boolean useFlowControl;
    /**
     * 流控类型
     */
    private String flowControlType;

    private int concurrentCorePoolSize;

    private int concurrentMaximumPoolSize;

    private int maxConnections;

    private String connectionsDisuseStrategyType;

    /**
     * 是否使用限流
     */
    private boolean useRateLimit;
    /**
     * 限流类型
     */
    private String rateLimiterType;
    /**
     * 毫秒数
     */
    private int milliseconds;
    /**
     * 限流每毫秒的资源数
     */
    private int permits;
    /**
     * 流量达到上限触发策略
     */
    private String rateLimiterFailStrategy;
    /**
     * 是否使用请求缓冲
     */
    private boolean enableBuffer;
    /**
     * 缓冲类型
     */
    private String bufferType;
    /**
     * 结果缓存
     */
    private boolean enableResultCache;
    /**
     * 缓存时长 -> 毫秒
     */
    private int resultCacheTime;
}
